﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace QuanLyNhaSach.param
{
    public partial class FrmParameterList : Form
    {


        #region Private Variable

        BindingList<ParameterDTO> listParameterBinding;
        int rowIndex; //Biến lưu giá trị của dòng đang sửa hơặc vừa thêm mới
        ParameterBUS parameterBUS;

        #endregion Private Variable

        #region Constructor
        public FrmParameterList()
        {
            InitializeComponent();
            parameterBUS = new ParameterBUS();
            dtgParameterList.AutoGenerateColumns = false;
            rowIndex = 0;
            listParameterBinding = new BindingList<ParameterDTO>();
        }
        #endregion Constructor

        private void FrmParameterList_Load(object sender, EventArgs e)
        {
            listParameterBinding = parameterBUS.GetNewBindingListParameter();
            dtgParameterList.DataSource = listParameterBinding;
            this.VisibleChanged += new EventHandler(FrmParameterList_VisibleChanged);
        }

        void FrmParameterList_VisibleChanged(object sender, EventArgs e)
        {
            if (this.Visible)
            {
                Global.GenerateNumber(dtgParameterList, colNumber.Index);
                Global.GenerateEditColumn(dtgParameterList, colEdit.Index);
            }
        }

        private void dtgParameterList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                if (e.ColumnIndex == colEdit.Index)
                {
                    UpdateParameter(e.RowIndex);
                }
            }
        }

        private void UpdateParameter(int index)
        {
            rowIndex = index;

            ParameterDTO parameterDTO = new ParameterDTO
            {
                ParameterID = int.Parse(dtgParameterList[colParameterID.Index, rowIndex].Value.ToString()),
                ParameterCode = dtgParameterList[colParameterCode.Index, rowIndex].Value.ToString(),
                ParameterName = dtgParameterList[colParameterName.Index, rowIndex].Value.ToString(),
                Value = int.Parse( dtgParameterList[colParameterValue.Index, rowIndex].Value.ToString()),
                Status = bool.Parse(dtgParameterList[colIsUse.Index, rowIndex].Value.ToString())
            };


            param.FrmParameterDetail frm = new FrmParameterDetail { ParameterDto = parameterDTO, Action = ActionName.Update };
            frm.ShowDialog();
        }

        private void DeleteParameter(int paraID)
        {
            if (dtgParameterList.Rows.Count > 0)
            {

                if (parameterBUS.DeleteParameter(paraID))
                {
                    Global.SetMessage(lblMessage, "Xóa thành công", true);
                    listParameterBinding.Remove(listParameterBinding.First(c => c.ParameterID == paraID));
                }
                else
                {
                    Global.SetMessage(lblMessage, "Xóa không thành công", false);
                }

            }
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            UpdateParameter(dtgParameterList.CurrentRow.Index);
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            int n = dtgParameterList.SelectedRows.Count;
            if (n > 0)
            {
                for (int i = 0; i < n; i++)
                {
                    rowIndex = dtgParameterList.SelectedRows[0].Index;
                    int paramID = int.Parse(dtgParameterList[colParameterID.Index, rowIndex].Value.ToString());
                    DeleteParameter(paramID);
                }
            }
        }

        public void ParameterChangeAfterInsert(ParameterDTO paramDTO)
        {
            ParameterDTO parameterDTO = parameterBUS.GetParameterByID(paramDTO.ParameterID);

            listParameterBinding.Add(parameterDTO);

            rowIndex = dtgParameterList.Rows.GetLastRow(DataGridViewElementStates.None);
            dtgParameterList[colEdit.Index, rowIndex].Value = Properties.Resources.edit_16;
            //Global.GenerateNumber(dtgCategoryList, colNumber.Index);
            if (rowIndex == 0)
            {
                dtgParameterList[colNumber.Index, rowIndex].Value = rowIndex + 1;
            }
            else
            {
                dtgParameterList[colNumber.Index, rowIndex].Value = (int.Parse(dtgParameterList[colNumber.Index, rowIndex - 1].Value.ToString()) + 1).ToString();
            }
        }

        public void ParameterChanged(ParameterDTO paraDTO)
        {
            ParameterDTO parameterDTO = parameterBUS.GetParameterByID(paraDTO.ParameterID);

            dtgParameterList[colParameterName.Index, rowIndex].Value = parameterDTO.ParameterName;
            dtgParameterList[colParameterValue.Index, rowIndex].Value = parameterDTO.Value;
            dtgParameterList[colIsUse.Index, rowIndex].Value = parameterDTO.Status;
        }
    }
}
